HandStack 파일 처리 심화

repository 설정과 파일 컨트롤을 연결하고, 저장·조회·삭제의 책임을 구분합니다.

QCN

학습 목표

  • HandStack의 repository 모듈과 $fileclient, $htmleditor 컨트롤을 사용하여 다양한 파일 처리 방법을 학습합니다.
  • 파일 업로드, 다운로드, 삭제, 정보 조회 및 수정 기능을 익힙니다.
  • 대용량 서비스의 기반이 되는 클라우드 스토리지 연동 개념을 이해합니다.
QCN

다양한 파일 업로드 시나리오

웹 애플리케이션에서는 다양한 형태의 파일 업로드가 필요합니다.

  • 프로필 이미지 업로드 (단일 이미지)
  • 게시판 첨부 파일 (단일 또는 다중 파일)
  • 문서 또는 이미지 에디터 내 이미지 링크 (에디터 연동)

HandStack은 이러한 모든 시나리오를 효율적으로 지원합니다.

QCN

로컬 파일 저장의 한계

"서버에 파일을 그냥 저장하면 안 될까요?" 물론 가능하지만, 서비스가 성장하면 문제가 발생합니다.

  • 서버 용량 제한 및 고가용성: 서버의 디스크 공간은 한정적이며, 서버 장애 시 파일 유실 위험이 있고, 안정적인 서비스가 어렵습니다.

  • 서버 확장 시 문제: 여러 서버로 확장(Scale-out)할 때 파일 동기화가 복잡해집니다.

  • 파일 관리 시나리오: 업무에 맞게 파일을 관리하는 업로드, 다운로드, 삭제, 변경등 관리 시나리오를 고려해야 합니다.

QCN

대규모 서비스를 위한 현대적인 파일 저장 솔루션

  • 클라우드 스토리지 AWS S3, Azure Blob Storage, Google Cloud Storage 등이 대표적입니다.
  • HandStack은 이러한 클라우드 스토리지와 유연하게 연동될 수 있도록 설계되었습니다.
QCN

클라우드 스토리지의 장점 (1/2)

  • 용량 확장

    • 서비스 한도와 비용을 확인하며 용량을 늘릴 수 있습니다.
  • 복제·가용성 옵션

    • 선택한 서비스와 복제 정책을 확인합니다. 삭제·오염에 대비한 백업도 필요합니다.
  • CDN 연동 용이성

    • 전 세계 사용자에게 파일을 빠르고 안정적으로 전송할 수 있습니다.
QCN

클라우드 스토리지의 장점 (2/2)

  • 비용 효율성
    • 사용한 만큼만 비용을 지불하여 초기 투자 비용이 적습니다.
QCN

Azure Blob Storage 개념 살짝 맛보기 (1/2)

HandStack이 연동할 수 있는 대표적인 클라우드 스토리지입니다.

  • 스토리지 계정 (Storage Account)

    • 모든 Azure Storage 데이터 개체에 대한 고유한 네임스페이스입니다.
  • 컨테이너 (Container)

    • 파일 시스템의 '폴더'와 유사한 개념으로, Blob(파일)들을 그룹화합니다.
  • Blob (객체)

    • 이미지, 문서 등 실제 '파일'을 의미합니다.
QCN

Azure Blob Storage 개념 살짝 맛보기 (2/2)

  • 권한 설정
    • 컨테이너나 개별 Blob에 대해 접근 권한을 세밀하게 제어할 수 있습니다.
QCN

HandStack과 클라우드 스토리지 연동

HandStack은 복잡한 과정을 단순화합니다.

  • 화면에서는 공통 파일 API를 사용합니다.
  • 운영자는 저장소별 권한·URL·비용·복구 정책을 관리합니다.
  • storage.json 설정 변경만으로 로컬 저장소와 클라우드 저장소 간 선택이 가능합니다.
  • 클라우드 스토리지 서비스(Azure Blob, AWS S3, Google Cloud Storage)에 파일 업로드를 연동하기 위해 필요한 각 항목 별로 설정을 해야합니다.
QCN

Azure Blob Storage 연동 정보

항목 설명 얻는 위치/방법
BlobContainerID Blob 컨테이너 이름 Azure Portal > Storage Account > Blob containers > 원하는 컨테이너 이름
BlobConnectionString Storage Account 연결 문자열 Azure Portal > Storage Account > Access keys > Connection string 복사
BlobItemUrl 업로드한 Blob 파일의 접근 URL 업로드 후: https://<storage-account-name>.blob.core.windows.net/<container-name>/<blob-name>
QCN

AWS S3 연동 정보 (1/3)

키는 소스·슬라이드·로그에 넣지 않습니다. 조직의 자격 증명 정책에 따라 발급·회전·폐기합니다.

QCN

AWS S3 연동 정보 (2/3)

항목 설명 얻는 위치/방법
AwsBucketName S3 버킷 이름 AWS Management Console > S3 > Buckets 리스트에서 해당 버킷 이름
AwsRegion S3 버킷이 위치한 리전 AWS Management Console > S3 > 버킷 상세 > 버킷 리전
AwsAccessKey AWS 접근 키(Access Key ID) AWS Management Console > IAM > Users > (사용자 선택) > Security credentials > Create access key
QCN

AWS S3 연동 정보 (3/3)

항목 설명 얻는 위치/방법
AwsSecretKey AWS 비밀 접근 키(Secret Access Key) 위와 동일. Access key 생성 시 함께 제공됨 (반드시 복사 후 안전하게 보관!)
AwsServiceUrl S3 서비스 엔드포인트 URL (일반적으로 기본값 사용) 일반적으로 생략 가능. 필요 시: https://s3.<region>.amazonaws.com (예: https://s3.ap-northeast-2.amazonaws.com)
QCN

Google Cloud Storage (GCS) 연동 정보

항목 설명 얻는 위치/방법
GcsBucketName GCS 버킷 이름 Google Cloud Console > Storage > Browser > 버킷 이름
GcsCredentialFile 서비스 계정 키(JSON) 파일 경로 Google Cloud Console > IAM & Admin > Service accounts > (서비스 계정 선택) > Keys > Add key > Create new key로 생성
BlobItemUrl (GCS) 업로드한 객체의 공개 URL 업로드 후: https://storage.googleapis.com/<bucket-name>/<object-name>
QCN

storage.json 내 저장소 설정 (1/3)

StorageType(FileSystem, AzureBlob, AwsS3, GoogleCloudStorage) 항목에 따라 파일 저장소가 설정됩니다.

QCN

storage.json 내 저장소 설정 (2/3)

{
    "ApplicationID": "HDS",
    "RepositoryID": "TSTLE01",
    "RepositoryName": "에디터내 이미지 파일",
    "StorageType": "FileSystem",
    "PhysicalPath": "../storage/HDS/TSTLE01",
    "BlobContainerID": "",
    "BlobConnectionString": "",
    "BlobItemUrl": "",
    "GcsBucketName": "",
    "GcsCredentialFile": "",
    "AwsBucketName": "",
    "AwsRegion": "",
    "AwsAccessKey": "",
QCN

storage.json 내 저장소 설정 (3/3)

    "AwsSecretKey": "",
    "AwsServiceUrl": "",
    ...
}
QCN

파일 정보 테이블 스키마 (1/3)

컬럼 ID 컬럼명 데이터 타입 길이 Null유무
ItemID 항목ID String 32 NO
RepositoryID 저장소ID String 32 NO
DependencyID 의존성ID String 32 YES
FileName 파일명 String 256 NO
PhysicalPath 물리경로 String 1000 YES
AbsolutePath 절대경로 String 1000 YES
RelativePath 상대경로 String 1000 YES
QCN

파일 정보 테이블 스키마 (2/3)

컬럼 ID 컬럼명 데이터 타입 길이 Null유무
Extension 확장자 String 50 YES
Size 파일크기 Number -1 YES
MD5 MD5 String 50 YES
CustomPath1 사용자경로1 String 50 YES
CustomPath2 사용자경로2 String 50 YES
CustomPath3 사용자경로3 String 50 YES
PolicyPath 정책경로여부 String 1 YES
QCN

파일 정보 테이블 스키마 (3/3)

컬럼 ID 컬럼명 데이터 타입 길이 Null유무
SortingNo 정렬번호 Number -1 YES
Comment 비고 String 200 YES
CreatedMemberNo 생성자회원번호 String 32 YES
CreatedAt 생성일시 DateTime -1 YES
QCN

잠깐, 구분해 보기

파일을 지웠는데 업무 첨부 목록에 남아 있다면 무엇을 확인할까요?

QCN

파일 정보 관리 쿼리 및 거래 ID (1/2)

$(HANDSTACK_SRC)/2.Modules/repository/Contracts/dbclient/HDS/STR

  • MYS010.xml: MySQL / MariaDB

  • ORA010.xml: Oracle

  • PGS010.xml: PostgreSQL

  • SLT010.xml: SQLite

  • SQS010.xml: SQL Server

QCN

파일 정보 관리 쿼리 및 거래 ID (2/2)

{
  "TransactionGetItem": "HDS|STR|SLT010|GD01",
  "TransactionGetItems": "HDS|STR|SLT010|LD01",
  "TransactionDeleteItem": "HDS|STR|SLT010|DD01",
  "TransactionUpsertItem": "HDS|STR|SLT010|MD01",
  "TransactionUpdateDependencyID": "HDS|STR|SLT010|UD01",
  "TransactionUpdateFileName": "HDS|STR|SLT010|UD02",
}
QCN

$fileclient 컨트롤 살펴보기

$fileclient는 repository 모듈과 통신하는 파일 UI입니다.

  • 업로드·다운로드·삭제를 같은 컨트롤에서 연결합니다.
  • 저장소 ID와 업무 항목의 연결을 샘플에서 확인합니다.

http://localhost:8421/sample/uicontrol/files.html

QCN

다음의 경우 파일 관리 기능을 직접 개발이 필요합니다

  • 이미지 업로드 후 파일 크기 조정, 압축, 변환 필요.
  • 파일 업로드 후 업무에 필요한 파일 이동이 필요.
  • 내부 시스템의 파일 관리와 통합이 필요한 경우
QCN

파일 처리의 완료 기준

  • 저장소 유형과 자격 증명을 환경별로 설정합니다.
  • 업로드한 파일의 메타데이터와 다운로드 결과를 대조합니다.
  • 삭제·이미지 변환·업무 연계는 필요한 후처리까지 검증합니다.
QCN

발표: 첫 화면의 목표를 말한 뒤 핵심 개념과 예제로 진행합니다. 확인 질문 뒤에는 답할 시간을 주고, 마지막 완료 기준을 남겨 질문을 받습니다. 발표 구성 참고: MIT OpenCourseWare, Patrick Winston, How to Speak (2018), https://ocw.mit.edu/courses/res-tll-005-how-to-speak-january-iap-2018/pages/how-to-speak/

이어지는 코드 조각입니다. 앞뒤 페이지를 순서대로 읽으며 전체 예제의 일부임을 설명합니다.

이어지는 코드 조각입니다. 앞뒤 페이지를 순서대로 읽으며 전체 예제의 일부임을 설명합니다.

질문 후 잠시 기다립니다. 답이 없으면 앞에서 본 예제를 다시 가리킵니다. 확인할 답: 실제 객체와 파일 메타데이터, DependencyID 연결을 함께 확인합니다. 다음 주제로 넘어가기 전에 차이를 청중의 표현으로 한 번 확인합니다.

질문을 받는 동안 이 확인 기준을 화면에 남깁니다. 청중이 자신의 업무에 적용할 다음 행동 하나를 고르게 합니다.